package com.appleyk.query;

import com.appleyk.model.Movie;
import com.appleyk.model.hras.Employees;
import com.appleyk.model.hras.WorkHistory;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface EmployeesQuery extends Neo4jRepository<Movie, Long> {

    /**
     * 查询 员工 职位名称
     * @param name 员工
     * @return 职位名称
     */
    @Query("match(n:Employees)-[:appoint]->(m:Positions) where n.employeesName={name} return m.positionName")
    List<String> getEmployeesPositions(@Param("name") String name);

    /**
     * 查询 员工 性别
     * @param name 员工
     * @return 性别
     */
    @Query("match(n:Employees) where n.employeesName={name} return n.gander")
    Integer getEmployeesSex(@Param("name") String name);

    /**
     * 查询 员工 出生日期
     * @param name 员工
     * @return 出生日期
     */
    @Query("match(n:Employees) where n.employeesName={name} return n.birthday")
    String getEmployeesBirthDate(@Param("name") String name);

    /**
     * 查询 员工 身份证
     * @param name 员工
     * @return 身份证
     */
    @Query("match(n:Employees) where n.employeesName={name} return n.idCard")
    String getEmployeesIdNumber(@Param("name") String name);

    /**
     * 查询 员工 联系方式
     * @param name 员工
     * @return 联系方式
     */
    @Query("match(n:Employees) where n.employeesName={name} return n.phone")
    String getEmployeesContactInfo(@Param("name") String name);

    /**
     * 查询 员工 家庭住址
     * @param name 员工
     * @return 家庭住址
     */
    @Query("match(n:Employees) where n.employeesName={name} return n.address")
    String getEmployeesAddress(@Param("name") String name);

    /**
     * 查询 员工 岗位详情
     * @param name reStrings
     * @return 岗位详情
     */
    @Query("match(n:Employees)-[:appoint]->(m:Positions) where n.employeesName={name} return m.positionName+', '+m.positionDescription")
    String getEmployeesPositionDetail(@Param("name") String name);

    /**
     * 查询 员工 部门
     * @param name reStrings
     * @return 部门
     */
    @Query("match(n:Employees)-[:work]->(m:Departments) where n.employeesName={name} return m.departmentName")
    String getEmployeesDepartments(@Param("name") String name);

    /**
     * 查询 员工 部门
     * @param name reStrings
     * @return 部门
     */
    @Query("match(n:Employees)-[:work]->(m:Departments) where n.employeesName={name} return m.departmentName + ', ' +m.departmentDescription")
    String getEmployeesDepartmentsDetail(@Param("name") String name);

    /**
     * 查询 员工 员工数量
     * @return 员工数量
     */
    @Query("match(n:Employees) return count(n)")
    String getEmployeesCount();

    /**
     * 查询 员工 男员工数量
     * @return 男员工数量
     */
    @Query("match(n:Employees) where n.gander = {gender} return count(n)")
    String getEmployeesGanderCount(@Param("gender") Integer gender);

    /**
     * 大于 x 岁员工多少
     * @param age age
     * @return return
     */
    @Query("MATCH (n:Employees) WHERE n.age > {age} RETURN COUNT(n)")
    String getEmployeesThanX(@Param("age") Integer age);

    /**
     * 小于 x 岁员工多少
     * @param age age
     * @return return
     */
    @Query("MATCH (n:Employees) WHERE n.age < {age} RETURN COUNT(n)")
    String getEmployeesLowX(@Param("age") Integer age);

    /**
     * 查询员工信息
     * @param name name
     * @return return
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n")
    Employees getEmployeesInfo(@Param("name") String name);


    /**
     * 查询 员工 加入公司时间
     *
     * @param name name
     * @return 加入公司时间
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.createTime")
    String getEmployeesJoinTime(@Param("name") String name);

    /**
     * 查询 员工 邮箱
     *
     * @param name name
     * @return 邮箱
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.email")
    String getEmployeesEmail(@Param("name") String name);

    /**
     * 查询 员工 政治面貌
     *
     * @param name name
     * @return 政治面貌
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.highestDegree")
    String getEmployeesHighestDegree(@Param("name") String name);

    /**
     * 查询 员工 最高学历
     *
     * @param name name
     * @return 最高学历
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.politicalProfile")
    String getEmployeesPoliticalProfile(@Param("name") String name);

    /**
     * 查询 员工 籍贯
     *
     * @param name name
     * @return 籍贯
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.hometown")
    String getEmployeesHometown(@Param("name") String name);

    /**
     * 查询 员工 紧急联系人
     *
     * @param name name
     * @return 紧急联系人
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.emergencyContact")
    String getEmployeesEmergencyContact(@Param("name") String name);

    /**
     * 查询 员工 紧急联系人电话
     *
     * @param name name
     * @return 紧急联系人电话
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.emergencyContactPhone")
    String getEmployeesEmergencyContactPhone(@Param("name") String name);

    /**
     * 查询 员工 毕业学校
     *
     * @param name name
     * @return 毕业学校
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.graduateSchool")
    String getEmployeesGraduateSchool(@Param("name") String name);

    /**
     * 查询 员工 民族
     *
     * @param name name
     * @return 民族
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.nation")
    String getEmployeesNation(@Param("name") String name);

    /**
     * 查询 员工 户籍所在地
     *
     * @param name name
     * @return 民族
     */
    @Query("MATCH (n:Employees) WHERE n.employeesName = {name} RETURN n.household")
    String getEmployeesHousehold(@Param("name") String name);

    /**
     * 查询 员工 证书
     *
     * @param name name
     * @return 证书
     */
    @Query("MATCH (n:Employees)-[:get]->(m:Certificate) WHERE n.employeesName = {name} RETURN '('+ m.certificateName+ ')' +  m.certificateDesc")
    List<String> getEmployeesCertificate(@Param("name") String name);

    /**
     * 查询 员工 工作经历
     *
     * @param name name
     * @return 工作经历
     */
    @Query("MATCH (n:Employees)-[:history]->(m:Workhistory) WHERE n.employeesName = {name} RETURN  m")
    List<WorkHistory> getEmployeesWorkHistory(@Param("name") String name);

}
